﻿using System;

using Flagwind.ComponentModel;
using Flagwind.Data;

namespace Flagwind.Database.Builder.Models.Users
{
    /// <summary>
    /// 表示“系统用户表”的领域模型。
    /// </summary>
    public class User : Entity
    {
        #region 公共属性

        /// <summary>
        /// 获取或设置用户ID。
        /// </summary>
        public long UserId
        {
            get
            {
                return this.GetFieldValue<long>("UserId");
            }
            set
            {
                this.SetFieldValue("UserId", value);
            }
        }

        /// <summary>
        /// 获取或设置用户名（工号，唯一验证）
        /// </summary>
        public string Username
        {
            get
            {
                return this.GetFieldValue<string>("Username");
            }
            set
            {
                this.SetFieldValue("Username", value, 50);
            }
        }

        /// <summary>
        /// 获取或设置登录密码。
        /// </summary>
        public string Password
        {
            get
            {
                return this.GetFieldValue<string>("Password");
            }
            set
            {
                this.SetFieldValue("Password", value, 50);
            }
        }

        /// <summary>
        /// 获取或设置姓名。
        /// </summary>
        public string Name
        {
            get
            {
                return this.GetFieldValue<string>("Name");
            }
            set
            {
                this.SetFieldValue("Name", value, 20);
            }
        }

        /// <summary>
        /// 获取或设置性别。
        /// </summary>
        public bool? Gender
        {
            get
            {
                return this.GetFieldValue<bool?>("Gender");
            }
            set
            {
                this.SetFieldValue("Gender", value);
            }
        }

        /// <summary>
        /// 获取或设置手机号。
        /// </summary>
        public string Mobile
        {
            get
            {
                return this.GetFieldValue<string>("Mobile");
            }
            set
            {
                this.SetFieldValue("Mobile", value, 11);
            }
        }

        /// <summary>
        /// 获取或设置邮箱。
        /// </summary>
        public string Email
        {
            get
            {
                return this.GetFieldValue<string>("Email");
            }
            set
            {
                this.SetFieldValue("Email", value, 50);
            }
        }

        /// <summary>
        /// 获取或设置头像图片URL。
        /// </summary>
        public string Avatar
        {
            get
            {
                return this.GetFieldValue<string>("Avatar");
            }
            set
            {
                this.SetFieldValue("Avatar", value, 100);
            }
        }

        /// <summary>
        /// 获取或设置备注信息。
        /// </summary>
        public string Remark
        {
            get
            {
                return this.GetFieldValue<string>("Remark");
            }
            set
            {
                this.SetFieldValue("Remark", value, 500);
            }
        }

        /// <summary>
        /// 获取或设置状态。
        /// </summary>
        public UserStatus Status
        {
            get
            {
                return this.GetFieldValue<UserStatus>("Status");
            }
            set
            {
                this.SetFieldValue("Status", value);
            }
        }

        /// <summary>
        /// 获取或设置注册时间。
        /// </summary>
        public DateTime CreatedTime
        {
            get
            {
                return this.GetFieldValue<DateTime>("CreatedTime");
            }
            set
            {
                this.SetFieldValue("CreatedTime", value);
            }
        }

        #endregion 公共属性

        #region 构造方法

        /// <summary>
        /// 初始化 <see cref="User"/> 类的新实例。
        /// </summary>
        public User()
        {
            this.Scheme = "";
            this.MappingType = MappingType.Table;
            this.MappingName = "User";

            this.PrimaryKey.Add("UserId");
        }

        #endregion 构造方法

        #region 字段设置

        protected override void SetFieldNames()
        {
            this.PropertyNames = new string[]
            {
                "UserId",
                "Username",
                "Password",
                "Name",
                "Gender",
                "Mobile",
                "Email",
                "Avatar",
                "Remark",
                "Status",
                "CreatedTime"
            };
        }

        #endregion 字段设置
    }
}